Backdrop

프로그래머스 ▸ 코딩 기초 트레이닝

부분 문자열 이어 붙여 문자열 만들기
0

문제 설명

길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

제한사항

  • 1 ≤ my_strings의 길이 = parts의 길이 ≤ 100
  • 1 ≤ my_strings의 원소의 길이 ≤ 100
  • parts[i]를 [s, e]라 할 때, 다음을 만족합니다.
    • 0 ≤ s ≤ e < my_strings[i]의 길이

입출력 예

my_stringspartsresult
["progressive", "hamburger", "hammer", "ahocorasick"][[0, 4], [1, 2], [3, 5], [7, 7]]"programmers"

입출력 예 설명

입출력 예 #1

  • 예제 1번의 입력을 보기 좋게 표로 나타내면 다음과 같습니다.

    imy_strings[i]parts[i]부분 문자열
    0"progressive"[0, 4]"progr"
    1"hamburger"[1, 2]"am"
    2"hammer"[3, 5]"mer"
    3"ahocorasick"[7, 7]"s"

    각 부분 문자열을 순서대로 이어 붙인 문자열은 "programmers"입니다. 따라서 "programmers"를 return 합니다.

풀이

이론

Array.prototype.reduce()

배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환해요.

arr.reduce(callback[, initialValue]);

callback 함수는 네 개의 인자를 가져요.

  • accumulator (acc, prev) : 콜백의 반환값을 누적
  • currentValue (cur, curr) : 처리할 현재 요소
  • currentIndex (idx, index) : 처리할 현재 요소의 인덱스 (optional)
  • array (src) : reduce()를 호출한 배열 (optional)

initialValue를 제공한 경우, accinitialValue와 같고, cur는 배열의 첫 번째 요소와 같아요.

initialValue를 제공하지 않은 경우, acc는 배열의 첫 번째 요소와 같고, cur는 두 번째 요소와 같아요.

const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((prev, curr) => prev + curr, 0);
console.log(sum); // 15

map vs reduce

map()은 반환값이 같은 길이의 배열이고, reduce()는 반환값이 무엇이든 상관없어요. 주어진 조건에 따라 map()reduce() 또는 다른 메서드를 사용해야 해요.

String.prototype.slice()

slice() 메소드는 문자열의 일부를 추출하면서 새로운 문자열을 반환해요.

str.slice(beginIndex[, endIndex])
  • beginIndex 또는 endIndex가 음수인 경우, 문자열의 끝에서부터의 길이를 나타내요.
  • endIndex가 생략된 경우, 문자열 마지막까지 추출해요.
const str = 'The quick brown fox jumps over the lazy dog.';
 
console.log(str.slice(31));
// Expected output: "the lazy dog."
 
console.log(str.slice(4, 19));
// Expected output: "quick brown fox"
 
console.log(str.slice(-4));
// Expected output: "dog."
 
console.log(str.slice(-9, -5));
// Expected output: "lazy"

코드

function solution(my_strings, parts) {
  return parts.reduce(
    (acc, [s, e], i) => acc + my_strings[i].slice(s, e + 1),
    ''
  );
}